"use client"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useEffect, useMemo, useState } from "react"; import { countCompletedDetailedAnswers, detailedSections, type DetailedSection, getDetailedQuestionCount, getDetailedSectionProgress, getDetailedSectionStorageKey, } from "@/lib/detailed-questions"; function BackIcon() { return ( ); } export default function DetailSectionClient({ section, }: { section: DetailedSection; }) { const [answers, setAnswers] = useState>({}); const [isHydrated, setIsHydrated] = useState(false); const router = useRouter(); useEffect(() => { const savedAnswers = window.localStorage.getItem( getDetailedSectionStorageKey(section.id), ); setAnswers( savedAnswers ? (JSON.parse(savedAnswers) as Record) : {}, ); setIsHydrated(true); }, [section.id]); useEffect(() => { if (!isHydrated) { return; } window.localStorage.setItem( getDetailedSectionStorageKey(section.id), JSON.stringify(answers), ); const completedTotal = detailedSections.reduce((total, currentSection) => { const sectionAnswers = currentSection.id === section.id ? answers : ((JSON.parse( window.localStorage.getItem( getDetailedSectionStorageKey(currentSection.id), ) ?? "{}", ) as Record) ?? {}); return ( total + countCompletedDetailedAnswers(currentSection, sectionAnswers) ); }, 0); if (completedTotal === getDetailedQuestionCount()) { router.replace("/details/complete"); } }, [answers, isHydrated, router, section, section.id]); const completedCount = useMemo( () => countCompletedDetailedAnswers(section, answers), [answers, section], ); const progress = useMemo( () => getDetailedSectionProgress(section, answers), [answers, section], ); const handleChange = (questionId: string, value: string) => { setAnswers((currentAnswers) => ({ ...currentAnswers, [questionId]: value, })); }; return (
9:41

{section.title}

{progress}%

Section Progress

{section.title}

{section.description}

{completedCount} of {section.questions.length} questions answered

{section.questions.map((question) => { const value = answers[question.id] ?? ""; return (

{question.label}

{question.description}

{question.type === "textarea" ? (